package com.atguigu.tingshu.user.service;

import com.atguigu.tingshu.model.user.UserInfo;
import com.atguigu.tingshu.vo.user.UserInfoVo;
import com.atguigu.tingshu.vo.user.UserPaidRecordVo;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.Date;
import java.util.List;
import java.util.Map;

public interface UserInfoService extends IService<UserInfo> {

    /**
     * 微信登录
     * @param code 小程序提交来临时票据，用于调用微信获取微信账户基本接口
     * @return
     */
    Map<String, String> wxLogin(String code);

    /**
     * 根据用户ID查询用户基本信息
     * @param userId
     * @return
     */
    UserInfoVo getUserInfo(Long userId);

    /**
     *修改当前用户基本信息
     * @param userInfoVo
     * @return
     */
    void updateUser(Long userId, UserInfoVo userInfoVo);

    /**
     * 专辑详情中每页声音列表(非免费试听)，对提交专辑以及声音ID进行判断得出每个声音购买情况
     *
     * @param userId                       用户ID
     * @param albumId                      专辑ID
     * @param needCheckBuyStausTrackIdList 需要判断购买状态声音ID集合
     * @return {20158:1,20159:1}
     */
    Map<Long, Integer> getCheckBuyStausTrackIdList(Long userId, Long albumId, List<Long> needCheckBuyStausTrackIdList);

    /**
     * 判断指定用户ID是否购买过指定专辑
     * @param userId
     * @param albumId
     * @return
     */
    Boolean isPaidAlbum(Long userId, Long albumId);

    /**
     * 查询指定用户某个专辑已购声音ID列表
     * @param albumId
     * @return
     */
    List<Long> getUserPaidTrackIdList(Long userId, Long albumId);

    /**
     * 支付（余额，微信）成功后虚拟物品发货
     *
     * @param userPaidRecordVo
     * @return
     */
    void savePaidRecord(UserPaidRecordVo userPaidRecordVo);

    /**
     * 更新VIP状态：处理过期会员
     * @return
     */
    void updateVipExpireStatus(Date date);
}
